VMs are commonly used in virtualized computing environments for executing various computing tasks. Typically, in a virtual machine environment a physical resource is time-shared among a plurality of independently operating, processor executable VMs. Each VM may function as a self-contained platform, running its own operating system (OS) and computer executable, application software. The computer executable instructions running in a VM may be collectively referred to as “guest software.” In addition, resources available within the VM may be referred to herein as “guest resources.” The guest software expects to operate as if it were running on a dedicated computer rather than in a VM. That is, the guest software expects to control various events and have access to hardware resources on a physical computing system (may also be referred to as a host platform or host system) which may be referred to herein as “host hardware resources”). The host hardware resource may include one or more network interface cards (NICs) (also referred to as adapters), one or more processors, resources resident on the processors (e.g., control registers, caches and others), memory (instructions residing in memory, e.g., descriptor tables), and other resources (e.g., input/output devices, host attached storage, network attached storage or others) that reside in a physical machine or are coupled to the host system.
Typically, VMs are executed within a computing device and managed by a virtual machine monitor (VMM), for example, a processor executable, Hypervisor layer provided by VMWare Inc. (without derogation of any trademark rights), a processor executable, Hyper-V layer provided by Microsoft Corp. (without derogation of any trademark rights) and others. A VM may be migrated from one host computing system (i.e. a source machine) to another host computing system (i.e. a destination machine). The VM that is migrated may be referred to as source VM, and the VM after migration to the destination machine maybe referred to as destination VM, throughout this specification.
To efficiently migrate a source VM from a source machine to a destination machine, the VMM has to be aware of writes to a virtual memory that is being used by the source VM. This is because the VMM has to send a VM-memory snapshot of the source VM to the destination machine when the migration process starts, without quiescing the source VM, and later sending only contents of dirty pages to the destination machine. This reduces VM downtime due to the migration process. Tracking VM memory writes, however, is challenging in a computing environment that uses single root input/output virtualization (SR-IOV) adapters. Continuous efforts are being made for efficiently tracking virtual memory writes for VM migration.